/**
 * @FileName: BroadBandOpenAcctController.java
 * @Author
 * @Description:
 * @Date 2016年8月3日 下午4:09:25
 * @CopyRight ZTE Corporation
 */
package cn.hpclub.server.controller.h5;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;

import cn.hpclub.server.constant.H5ApiConstant;
import cn.hpclub.server.model.Broadband;
import cn.hpclub.server.model.ServiceReservation;
import cn.hpclub.server.service.BdOpenAcctService;
import cn.hpclub.server.util.SystemConfigUtil;

public class BroadBandOpenAcctController extends BaseH5Controller{
    private static final Logger logger           = LoggerFactory.getLogger(BroadBandOpenAcctController.class);
    private String              CMCC_HOST_PREFIX = SystemConfigUtil.getSystemConfig().getCmccHostPrefix();

    /**
     * 根据宽带类型获取宽带预约数据列表
     */
    public void listByType(){
        int pageNumber = getParaToInt("pageNumber", 1);
        int pageSize = getParaToInt("pageSize", 10);
        int orgId = getParaToInt("storeId");// 客户端接口传的参数名为storeId
        String type = getPara("type");// 宽带类型: 1 校园套餐，2 大市场 3.商务动力

        // 仅校园开户、大市场开户和商务动力开户
        if((!Broadband.BD_CAMPUS.equals(type)) && (!Broadband.BD_MARKET.equals(type))
                && (!Broadband.BD_SHWDL.equals(type))){
            renderJson(setResponseObj(H5ApiConstant.ResultCode.FAIL_CODE, H5ApiConstant.Msg.BD_ERROR_TYPE, null)
                    .toString());
            return;
        }

        Page<Record> pager = BdOpenAcctService.service.getListByType(pageNumber, pageSize, orgId, type);
        renderJson(pager);
    }

    public void getOrgParams(){
        int orgId = getParaToInt("storeId");// 客户端接口传的参数名为storeId
        String sql = "SELECT NumCode,org_cls.WebsiteId FROM organization org, organization_class org_cls WHERE org.WebsiteId = org_cls.id AND org.id=?";
        Record record = Db.findFirst(sql, orgId);
        JSONObject jo = new JSONObject();
        JSONObject root = new JSONObject();
        if(record != null){
            root.put("RETURN_CODE", 0);
            root.put("RETURN_MSG", "success");
            JSONObject data = new JSONObject();
            data.put("NumCode", record.getStr("NumCode"));
            data.put("ChannelType", record.getStr("WebsiteId"));
            root.put("OUT_DATA", data);
        } else{
            root.put("RETURN_CODE", 1);
            root.put("RETURN_MSG", "未找到该机构对应的参数");
            root.put("OUT_DATA", "");
        }
        jo.put("ROOT", root);
        renderJson(jo.toString());
    }

    /**
     * 根据type获取详情
     */
    public void detailByType(){
        String id = getPara("id");
        // 数据库中的宽带类型。为了安全性，加入了类型和id的双重匹配。该类型通过获取列表时携带。
        String broad_type = getPara("broad_type");// 宽带类型: 0 爱家小区、1 优家小区、2
                                                  // 商务动力、3
        // 校园套餐
        Broadband detail = BdOpenAcctService.service.getDetailByType(id, broad_type);

        renderJson(detail);
    }

    public void reserve(){
        try{
            String content = getHttpRequestContent(getRequest());
            logger.debug("content=" + content);
            JSONObject params = new JSONObject(content);
            saveOrderToLocal(params);
        }
        catch(IOException e){
            e.printStackTrace();
        }
        JSONObject returnJo = new JSONObject();
        returnJo.put("resultCode", "00");
        returnJo.put("resultDesc", "SUCCESS");
        returnJo.put("resultDesc", "SUCCESS");
        returnJo.put("rtnMsg", "ok");
        returnJo.put("rtnCode", 1000);
        JSONObject root = new JSONObject();
        root.put("return", returnJo);
        renderJson(root.toString());
    }

    private boolean saveOrderToLocal(JSONObject params){
        ServiceReservation model = new ServiceReservation();

        model.set("manager_id", params.getString("prodPrcid"))// 资管ID
                .set("channel_code", getPara("channelCode", ""))// 渠道编码
                .set("boss_no", "")// Boss订单号
                .set("install_area", params.getString("area"))// 安装小区
                .set("member_phone", params.getString("memPhone"));// 成员手机号,多个电话号码保存到一个字段，用逗号隔开

        Broadband bd = Broadband.dao.getBroadbandInfoById(params.getInt("broadbandId"));

        // 保存订单和反馈信息都需要的字段
        Date create_date = new Date();// 创建时间
        model.set("appid", getParaToInt("appid", 100000056))// 目前写死
                .set("area", params.getString("area"))// 区县
                .set("city", params.getString("city"))// 城市，默认成都
                .set("install_address", params.getString("address"))// 地址，.net版只有保存订单的时候才保存，保存反馈信息时没有保存
                .set("reward", 0.00)// 必填字段，不能为空，.net版只有保存订单的时候才保存，保存反馈信息时没有保存
                .set("create_date", create_date)// 创建时间
                .set("customer_name", params.getString("customerName"))// 客户姓名
                .set("expected_install_time", getPreTime(params.getString("preTime")))// 期望安装时间
                // .set("feed_back", getPara("feedback", null))// 反馈内容
                // .set("first_install_cost", getPara("firstInstallCost",
                // "0.00"))// 初装费
                .set("is_pay", getParaToInt("isPay", 0))// 是否支付,0表示未支付，1表示已支付
                .set("broadband_id", params.getInt("broadbandId"))// 宽带预约ID
                // .set("other_contact_phone", getPara("secondPhone"))// 其他联系电话
                .set("reservation_state", getParaToInt("reservation_state", 1))// 预约状态:1待审核,2审核通过,3审核不通过,4结单
                .set("sale_type", getParaToInt("saleType", 1))// 1.直销通原生App,2.直销通分享页面,3.微店，暂未使用
                .set("service_type", getParaToInt("serviceType", 2))// 服务类型:
                                                                    // 0贴膜预约,1维修预约,2宽带预约,3业务预约
                // .set("org_id", getParaToInt("storeId", null))//
                // 店铺ID，目前无店铺，传入的是机构ID
                .set("telephone", params.getString("phoneNo"))// 客户电话
                .set("user_id", params.getInt("userId"))// 店员ID
                .set("gender", 0)// 客户性别 0先生 1女士
                .set("bd_name", params.getString("bdName"))// 宽带资费名称
                .set("bd_code", params.getString("prodPrcid"));// 宽带资费代码
        // .set("bd_summary", bd.getStr("bd_summary"))// 宽带资费简介
        // .set("bd_creator_org_name", bd.getStr("bd_creator_org_name"));//
        // 宽带资费发布人机构名称

        return model.save();
    }

    private String getPreTime(String preTime){
        try{
            // System.out.println("preTime = " + preTime);
            if(StrKit.notBlank(preTime)){
                Calendar c = Calendar.getInstance();
                SimpleDateFormat sdfFrm = new SimpleDateFormat("yyyy-MM-dd");
                SimpleDateFormat sdfTo = new SimpleDateFormat("yyyyMMdd");
                SimpleDateFormat sdf = new SimpleDateFormat("HHmmss");

                c.setTime(sdfFrm.parse(preTime));

                preTime = sdfTo.format(c.getTime()) + sdf.format(new Date());
            }
        }
        catch(ParseException e){
            e.printStackTrace();
        }

        return preTime;
    }

}
